package br.edu.catolica.sadbc.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Transient;

import org.hibernate.validator.Length;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Role;
import org.jboss.seam.annotations.Roles;

import br.edu.catolica.sadbc.core.entity.AbstractEntity;
import br.edu.catolica.sadbc.entity.enums.SituacaoUsuario;

@Entity
@Name(value = "usuario")
@Roles({
	@Role(name = "usuarioSession")
})
public class Usuario extends AbstractEntity {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id_usuario")
	private Long id;
	
	@Length(min = 5, message = "Campo nome de usuário menor que 5 caracteres.")
	@Column(name = "nomeUsuario", insertable = true, updatable = false, nullable = false, unique = true, length = 15)
	private String nomeUsuario;
	
	@Column(name = "nomeAvaliador", insertable = true, updatable = true, nullable = true)
	private String nomeAvaliador;

	@Length(min = 8, message = "Campo senha menor que 8 caracteres.")
	@Column(name = "senha", insertable = true, updatable = true, nullable = false, unique = false, length = 255)
	private String senha;
	
	@Transient
	private String senhaAtual;
	
	@Transient
	private String senhaNova;
	
	@Transient
	private String confirmaSenha;
	
	@Column(insertable = true, updatable = true, nullable = false)
	private Integer tipoUsuario;
	
	@OneToOne(targetEntity = Docente.class, mappedBy = "usuario", fetch = FetchType.EAGER)
	private Docente docente;
	
	@Column(insertable = true, updatable = true, nullable = false)
	private Integer status;
	
	public Usuario() {

	}

	@Override
	public Long getId() {
		return id;
	}
	
	public void setId(Long id) {
		this.id = id;
	}

	public String getNomeUsuario() {
		return nomeUsuario;
	}

	public void setNomeUsuario(String nomeUsuario) {
		this.nomeUsuario = nomeUsuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getConfirmaSenha() {
		return confirmaSenha;
	}

	public void setConfirmaSenha(String confirmaSenha) {
		this.confirmaSenha = confirmaSenha;
	}

	public String getSenhaAtual() {
		return senhaAtual;
	}

	public void setSenhaAtual(String senhaAtual) {
		this.senhaAtual = senhaAtual;
	}

	public String getSenhaNova() {
		return senhaNova;
	}

	public void setSenhaNova(String senhaNova) {
		this.senhaNova = senhaNova;
	}

	public Integer getTipoUsuario() {
		return tipoUsuario;
	}

	public void setTipoUsuario(Integer tipoUsuario) {
		this.tipoUsuario = tipoUsuario;
	}

	public Docente getDocente() {
		return docente;
	}

	public void setDocente(Docente docente) {
		this.docente = docente;
	}

	public String getNomeAvaliador() {
		return nomeAvaliador;
	}

	public void setNomeAvaliador(String nomeAvaliador) {
		this.nomeAvaliador = nomeAvaliador;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}
	
	@Transient
	public boolean isAvaliadorAtivo() {
		return getStatus() != null && getStatus().equals(SituacaoUsuario.ATIVO.getValue());
	}

}
